package com.woniuxy.cloud.carl.store.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.woniuxy.cloud.carl.store.client.result.StoreSaleDto;
import com.woniuxy.cloud.carl.store.infra.model.Store;
import com.woniuxy.cloud.carl.store.infra.model.StoreSale;
import com.woniuxy.cloud.carl.store.infra.mapper.StoreSaleMapper;
import com.woniuxy.cloud.carl.store.service.StoreSaleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.woniuxy.cloud.carl.store.service.StoreService;
import com.woniuxy.result.Result;
import com.woniuxy.utils.Assert;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 门店月销表 服务实现类
 * </p>
 *
 * @author Lucas
 * @since 2023-07-19
 */
@Service
public class StoreSaleServiceImpl extends ServiceImpl<StoreSaleMapper, StoreSale> implements StoreSaleService {
    @Autowired
    StoreService storeService;
    @Override
    public Result<List<StoreSaleDto>> getStoreSale(Long storeId) {
        ArrayList<StoreSaleDto> storeSaleDtos = new ArrayList<>();
        if (storeId!=null){
            List<StoreSale> saleList = list(new QueryWrapper<StoreSale>().eq("store_id", storeId));
            Store store = storeService.getById(storeId);
            Assert.state(store!=null,"门店信息错误");
            StoreSaleDto storeSaleDto = new StoreSaleDto();
            storeSaleDto.setStoreId(storeId);
            storeSaleDto.setStoreName(store.getStoreName());
            storeSaleDto.setStoreSales(saleList);
            storeSaleDtos.add(storeSaleDto);
        }else {
            List<StoreSale> list = list();
            List<StoreSale> sortedSale = list.stream().sorted((o1, o2) -> {
                if (o1.getStoreId() == o2.getStoreId())
                    return o1.getTime().compareTo(o2.getTime());
                return o1.getStoreId() > o2.getStoreId() ? 1 : -1;
            }).collect(Collectors.toList());
            for (StoreSale storeSale : sortedSale) {
                if (storeSaleDtos.stream().map(o->o.getStoreId())
                        .collect(Collectors.toList()).contains(storeSale.getStoreId())){
                    List<StoreSaleDto> list1 = storeSaleDtos.stream().
                            filter(o -> o.getStoreId() == storeSale.getStoreId()).collect(Collectors.toList());
                    if (list1!=null) list1.get(0).getStoreSales().add(storeSale);
                }else {
                    StoreSaleDto storeSaleDto = new StoreSaleDto();
                    storeSaleDto.setStoreId(storeSale.getStoreId());
                    Store store = storeService.getById(storeSale.getStoreId());
                    storeSaleDto.setStoreName(store.getStoreName());
                    ArrayList<StoreSale> storeSales = new ArrayList<>();
                    storeSales.add(storeSale);
                    storeSaleDto.setStoreSales(storeSales);
                    storeSaleDtos.add(storeSaleDto);
                }
            }
        }
        return Result.success(storeSaleDtos);
    }
}
